package com.gzedu.frame.db;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 
 * <font color="#0000FF">
 * <p>
 * 此类用于Sqlite的数据组装<br>
 * </p>
 * <p>
 * 支持的数据格式有：<br>
 * </p>
 * <ol>
 * <li>list</li>
 * <li>Map</li>
 * <li>String[]</li>
 * <li>String</li>
 * </ol>
 * </font>
 * 
 * @Title: AssemblySql.java
 * @Package com.gzedu.common.logic.db
 * @company: 广州远程教育中心有限公司
 * @author : 戴俊林
 * @date 2012-8-28 下午5:20:29
 * @version V1.0
 */
public class AssemblySql {

	/**
	 * 
	 * <pr>将String数据类型组装到SQL中
	 * 
	 * @Title: assemblySqlByString
	 * @param info
	 * @param sql
	 * @return
	 * @return String
	 * @throws
	 */
	public static String assemblySqlByString(String info, String sql) {
		StringBuilder newSql = new StringBuilder();
		String[] sqlString = sql.split("\\?");
		newSql.append(sqlString[0]);
		newSql.append("'");
		newSql.append(info);
		newSql.append("'");
		newSql.append(";");
		return newSql.toString();
	}

	/**
	 * 
	 * <p>
	 * 将List数据格式的数据组装到SQL中，这将大大的缩短数据库操作执行时间
	 * </p>
	 * 
	 * @Title: assemblySqlByList
	 * @param list
	 * @param sql
	 * @return
	 * @return String
	 * @throws
	 */
	public static String assemblySqlByList(List<Map<String, String>> list,
			String sql) {
		StringBuilder newSql = new StringBuilder();
		String[] sqlString = sql.split("\\?");
		newSql.append(sqlString[0]);
		int i = 0;
		for (Map<String, String> map : list) {
			if (i != 0) {
				newSql.append(" UNION ALL SELECT ");
			}
			Set<String> set = map.keySet();
			Iterator<String> iterator = set.iterator();
			while (iterator.hasNext()) {
				String value = map.get(iterator.next());
				newSql.append("'");
				newSql.append(value);
				newSql.append("',");
				i++;
				value = null;
			}
			newSql.deleteCharAt(newSql.length() - 1);
			newSql.append("\n");
		}
		newSql.append(";");
		return newSql.toString();
	}

	/**
	 * 
	 * <p>
	 * 将map数据格式的数据组装到SQL中
	 * </p>
	 * 
	 * @Title: assemblySqlByMap
	 * @param map
	 * @param sql
	 * @return
	 * @return String
	 * @throws
	 */
	public static String assemblySqlByMap(Map<String, String> map, String sql) {
		StringBuilder newSql = new StringBuilder();
		String[] sqlString = sql.split("\\?");
		Set<String> set = map.keySet();
		Iterator<String> iterator = set.iterator();
		int i = 0;
		while (iterator.hasNext()) {
			String value = map.get(iterator.next());
			newSql.append(sqlString[i]);
			newSql.append("'");
			newSql.append(value);
			newSql.append("'");
			i++;
			value = null;
		}
		newSql.append(sqlString[i]);
		newSql.append(";\n");
		return newSql.toString();
	}

	/**
	 * 
	 * <p>
	 * 将List转换成数组
	 * </p>
	 * 
	 * @Title: changeList
	 * @param list
	 * @return
	 * @return Object[]
	 * @throws
	 */
	public static Object[] changeList(List<Object> list) {
		if (list != null && list.size() > 0) {
			return list.toArray(new Object[list.size()]);
		} else {
			return null;
		}
	}

}
